% latexcad.sty - enhanced macros for LaTeX CAD program version 1.9
% Updated 17 Dec 1995
%         21/1/96, shadebox bug fix
%         17/5/96 Automatic defaults for one/two column width
%       for PostScript figures. PostScript width
%       does *not* automatically go back to the default -
%       must explicitly use \dfltpostscriptwidth
%       16/7/96 - comments on end of *every* macro line, to 
%       prevent unwanted side-effects.
% J Leis leis@usq.edu.au

\typeout{ latexcad.sty (V 1.9 Mar 98) - Support for LaTeXCAD drawing package. } 
\typeout{ John Leis, leis@usq.edu.au Adapted from various CTAN sources. }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% User Macros for LaTeX, SliTeX %%%
%================================================================
% For LaTeX %

% Placing LaTeX-CAD drawings (.lp)
% \placedrawing{test.lp}{A Diagram.}{fig:test}
% Multi-line format (note position of '%' ):
% \placedrawing{test.lp}%
%   {A Diagram.}%
%   {fig:test}
%
% \drawingscale{0.4mm}  
% \placedrawing[p]{test.lp}{A Diagram.}{fig:test}
% \placedrawing*{test.lp}
% \placedrawing*[p]{test.lp}

% placing GnuPlots (.gp)
% \placegraph{test.gp}{A test graph.}{fig:test}         
% \placegraph[p]{test.gp}{A test graph.}{fig:test}      
% \placegraph*{test.gp}                         
% \placegraph*[p]{test.gp}                      

% Placing encapsulated PostScript (.eps)
% \placepostscript{test.eps}{A test picture.}{fig:test}
% Multi-line format (note position of '%' ):
% \placepostscript{test.eps}%
%   {A test picture.}%
%   {fig:test}
%
% \setpostscriptwidth{80mm}                     
% \placepostscript[p]{test.eps}{A test picture.}{fig:test}
% \placepostscript*{test.eps}                   
% \placepostscript*[p]{test.eps}                        
%================================================================

%================================================================
% For SliTeX %
% Placing LaTeX-CAD drawings (.sp)
% \drawingscale{0.4mm}
% \placeslidedrawing{test.sp}{ A Slide Drawing }

% Placing GnuPlots (.gp)
% \placeslidegraph{test.gp}{ A Slide Graph }

% Placing encapsulated PostScript
% \setpostscriptwidth{40mm}
% \placeslidepostscript{test.eps}{ A Slide PostScript }
% \placeslidepostscript{test.eps}{ A Slide PostScript }

%================================================================
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%================================================================
% redefine \tenrm 
% \tenrm is used in gnuplots, but is not defined
% \it appears better
\newcommand{\tenrm}{\it}%
%================================================================


%================================================================
\newlength{\@drawingscale}%              % relative scaling on LaTeX-CAD drawings
\newlength{\@dfltdrawingscale}%          % default for this

% *** change here - defaults for one/two columns 17/5/96
\if@twocolumn%
    \setlength{\@dfltdrawingscale}{0.5mm}%   % default to 0.5mm
\else%
    \setlength{\@dfltdrawingscale}{1.0mm}%   % default to 1.0mm (full size on LaTeX-CAD)
\fi%

\setlength{\@drawingscale}{\@dfltdrawingscale}%

% set the PostScript figure width back to the default
\def\dfltdrawingscale{\@drawingscale=\@dfltdrawingscale}%
%================================================================

%================================================================
% command to change scale
% use: \drawingscale{0.5mm} 
\def\drawingscale#1{\@drawingscale=#1}%
%================================================================

%================================================================
\newlength{\@pswidth}%           % width of PostScript figure
\newlength{\@dfltpswidth}%       % default for this

% *** change here - defaults for one/two columns 17/5/96
\if@twocolumn%
    \setlength{\@dfltpswidth}{80mm}%        % default to 80mm for A4 paper
\else%
    \setlength{\@dfltpswidth}{160mm}%        % default to 160mm for A4 paper
\fi%
    
\setlength{\@pswidth}{\@dfltpswidth}%
%================================================================

%================================================================
% command to size a PostScript figure's width
% use: \setpostscriptwidth{80mm} 
\def\setpostscriptwidth#1{\@pswidth=#1}%

% set the PostScript figure width back to the default
\def\dfltpostscriptwidth{\@pswidth=\@dfltpswidth}%
%================================================================



%================================================================
% Place a LaTeXCAD drawing in a source file
% \placedrawing*[placement]{ filename }{ caption string }{ crossref-label }
% `*' - the last two arguments are missing (ie no `Figure' caption & label )
% [placement] is optional (default is tbp, see Lamport p 176)
%
% Examples:-
% \placedrawing{test.lp}{A Test Picture}{fig:testa}     % normal usage
% \drawingscale{0.4mm}                                  % for next drawing only!
% \placedrawing[p]{test.lp}{thecaption}{fig:testb}      % on a page of floats
% \placedrawing*{test.lp}                               % no `Figure' label
% \placedrawing*[p]{test.lp}                            % as above, but place on a page of floats


% `*' as first arg - no `label' follows later
\def\placedrawing{\@ifstar{\@dwgnl}{\@dwgl}}%

% with label
% see if optional [placement] argument present 
\def\@dwgl{ \@ifnextchar[{\@ddwgl}{\@ddwgl[tbp]} }%

% no label macro - default selection
\def\@dwgnl{ \@ifnextchar[{\@ddwgnl}{\@ddwgnl[tbp]} }%

% the final macros
\def\@ddwgl[#1]#2#3#4%   % with label
{%
    % WITH LABEL,placement=#1,file=#2,caption=#3,label=#4
    \setlength{\unitlength}{\@drawingscale}%
    \begin{figure}[#1]%
        \begin{center} \input #2 \end{center}%
        \caption{#3}\label{#4}%          % NOTE! \caption MUST come before \label!
    \end{figure}%
    %%%%%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}%  % back to default
}%

\def\@ddwgnl[#1]#2%      % no label 
{%
    % NO LABEL,placement=#1,file=#2
    \setlength{\unitlength}{\@drawingscale}%
    \begin{figure}[#1]%       
        \begin{center} \input #2 \end{center}%
    \end{figure}%
    %%%%%%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}%  % back to default
}%
%================================================================


%================================================================
% Place a GnuPlot graph (with eepic term) in a source file
% \placegraph*[placement]{ filename }{ caption string }{ crossref-label }
% `*' - the last two arguments are missing (ie no `Figure' caption & label )
% [placement] is optional (default is tbp, see Lamport p 176)
%
% Examples:-
% \placegraph{test.gp}{A Test Graph}{fig:testa}         % normal usage
% \placegraph[p]{test.gp}{thecaption}{fig:testb}        % on a page of floats
% \placegraph*{test.gp}                                 % no `Figure' label
% \placegraph*[p]{test.gp}                              % as above, but place on a page of floats

% `*' as first arg - no `label' follows later
\def\placegraph{\@ifstar{\@grnl}{\@grl}}%

% with label
% see if optional [placement] argument present 
\def\@grl{ \@ifnextchar[{\@dgrl}{\@dgrl[tbp]} }%

% no label macro - default selection
\def\@grnl{ \@ifnextchar[{\@dgrnl}{\@dgrnl[tbp]} }%

% the final macros
\def\@dgrl[#1]#2#3#4%    % with label
{%
    % WITH LABEL,placement=#1,file=#2,caption=#3,label=#4
    \begin{figure}[#1]%
        \begin{center} \input #2 \end{center}%
        \caption{#3} \label{#4}%
    \end{figure}%            
    %%%%%%%%%%\setlength{\@drawingscale}{1.0mm}%       % back to default
}%

\def\@dgrnl[#1]#2%       % no label 
{%
    % NO LABEL,placement=#1,file=#2
    \begin{figure}[#1]%
        \begin{center} \input #2 \end{center}%
    \end{figure}%
    %%%%%%%%%%\setlength{\@drawingscale}{1.0mm}%       % back to default
}%
%================================================================



%================================================================
% Place a PostScript figure in a source file
% \placepostscript*[placement]{ filename }{ caption string }{ crossref-label }
% `*' - the last two arguments are missing (ie no `Figure' caption & label )
% [placement] is optional (default is tbp, see Lamport p 176)
%
% Examples:-
% \placepostscript{test.eps}{A Test Picture}{fig:testa} % normal usage
% \setpostscriptwidth{80mm}                             % for next drawing only!
% \placepostscript[p]{test.eps}{thecaption}{fig:testb}  % on a page of floats
% \placepostscript*{test.eps}                           % no `Figure' label
% \placepostscript*[p]{test.eps}                        % as above, but place on a page of floats


% `*' as first arg - no `label' follows later
\def\placepostscript{\@ifstar{\@psnl}{\@psl}}%

% with label
% see if optional [placement] argument present 
\def\@psl{ \@ifnextchar[{\@dpsl}{\@dpsl[tbp]} }%

% no label macro - default selection
\def\@psnl{ \@ifnextchar[{\@dpsnl}{\@dpsnl[tbp]} }%

% the final macros
% See Antoni Diller, "LaTeX Line by Line", 1993
\def\@dpsl[#1]#2#3#4%    % with label
{%
    % WITH LABEL,placement=#1,file=#2,caption=#3,label=#4
    \begin{figure}[#1]%
    \begin{center}%
        \leavevmode%
        \hbox{ \epsfxsize=\@pswidth \epsffile{#2} }%
    \end{center}%
    \caption{#3} \label{#4}%
    \end{figure}%
    %%%%\setlength{\@pswidth}{\@dfltpswidth}%    % back to default
}%

\def\@dpsnl[#1]#2%       % no label 
{%
    % NO LABEL,placement=#1,file=#2
    \begin{figure}[#1]%
    \begin{center}%
        \leavevmode%
        \hbox{ \epsfxsize=\@pswidth \epsffile{#2} }%
    \end{center}%
    \end{figure}%
    %%%%%%%\setlength{\@pswidth}{\@dfltpswidth}%    % back to default
}%
%================================================================

%================================================================
% Place a LaTeX-CAD drawing on a slide
% \placeslidedrawing{ filename }{ title }
% Note that the title appears above the picture.
% Example:
% \drawingscale{0.4mm}
% \placeslidedrawing{test.lp}{ A Slide Drawing }
\def\placeslidedrawing#1#2%
{%
    \setlength{\unitlength}{\@drawingscale}%
    \begin{center} \mbox{#2} \end{center}%
    \vspace{-5mm}%
    \begin{center} \input #1 \end{center}%
    %%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}%  % back to default
}%
%================================================================


%================================================================
% Place a GnuPlot graph on a slide
% Use: \placeslidegraph{ filename }{ title }
% Note that the title appears above the picture.
% Example:
% \placeslidegraph{test.gp}{ A Slide Graph }
\def\placeslidegraph#1#2%
{%
    \begin{center} \mbox{#2} \end{center}%
    \vspace{-10mm}%
    \begin{center} \input #1 \end{center}%
    %%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}%  % back to default
}%
%================================================================

%================================================================
% Place a PostScript graph on a slide
% Use: \placeslidepostscript{ filename }{ title }
% Note that the title appears above the picture.
% Example:
% \placeslidepostscript{test.eps}{ A Slide PostScript }
\def\placeslidepostscript#1#2%
{%
    \begin{center} \mbox{#2} \end{center}%
    \vspace{-10mm}%
    \begin{center}%
        \leavevmode%
        \hbox{ \hspace{-15mm} \epsfxsize=\@pswidth \epsffile{#1} }%
    \end{center}%
    %%%%%%%%%\setlength{\@pswidth}{\@dfltpswidth}%    % back to default
}%
%================================================================


%================================================================
% macros for LaTeX-CAD program
\newcommand{\drawcenteredtext}[3]{\put(#1,#2){\makebox(0,0){#3}}}%
\newcommand{\drawlefttext}[3]{\put(#1,#2){\makebox(0,0)[l]{#3}}}%
\newcommand{\drawrighttext}[3]{\put(#1,#2){\makebox(0,0)[r]{#3}}}%
\newcommand{\drawframedtext}[3]{\put(#1,#2){\makebox(0,0)[c]{\framebox{#3}}}}%

\newcommand{\drawuptext}[3]{\put(#1,#2){\makebox(0,0){\rotate[l]{#3}}}}%
\newcommand{\drawdowntext}[3]{\put(#1,#2){\makebox(0,0){\rotate[r]{#3}}}}%

\newcommand{\drawstackedtext}[3]{\put(#1,#2){\makebox(0,0){\shortstack{#3}}}}%

\newcommand{\drawframebox}[5]{%
    \put(#1,#2){\makebox(0,0){\framebox(#3,#4)[cc]{#5}}}}%

\newcommand{\drawdashbox}[5]{%
    \put(#1,#2){\makebox(0,0){\dashbox{1}(#3,#4)[cc]{#5}}}}%

\newcommand{\drawoval}[5]{%
    \put(#1,#2){\oval(#3,#4) \makebox(0,0)[cc]{#5}}}%

\newcommand{\drawcircle}[4]{%
    \put(#1,#2){\circle{#3}} \put(#1,#2){\makebox(0,0)[cc]{#4}}}%

\newcommand{\drawshadedcircle}[5]{%
    \special{sh #5}\put(#1,#2){\circle{#3}} \put(#1,#2){\makebox(0,0)[cc]{#4}}}%

\newcommand{\drawellipse}[5]{%
    \put(#1,#2){\ellipse{#3}{#4} \makebox(0,0)[cc]{#5}}}%

\newcommand{\drawpath}[4]{\path(#1,#2)(#3,#4)}%
\newcommand{\drawdotline}[4]{\dottedline[.]{1}(#1,#2)(#3,#4)}%
\newcommand{\drawdashline}[4]{\dashline{1}(#1,#2)(#3,#4)}%
\newcommand{\drawvector}[5]{\put(#1,#2){\vector(#4,#5){#3}}}%

\newcommand{\drawshadowbox}[3]{\put(#1,#2){\makebox(0,0){\shadowbox{#3}}}}%
\newcommand{\drawdoublebox}[3]{\put(#1,#2){\makebox(0,0){\doublebox{#3}}}}%
\newcommand{\drawovalbox}[3]{\put(#1,#2){\makebox(0,0){\ovalbox{#3}}}}%
\newcommand{\drawOvalbox}[3]{\put(#1,#2){\makebox(0,0){\Ovalbox{#3}}}}%
\newcommand{\drawdot}[2]{\put(#1,#2){\circle*{0.5}}}%
\newcommand{\drawthickdot}[2]{\put(#1,#2){\circle*{1}}}%
\newcommand{\drawhollowdot}[2]{\put(#1,#2){\circle{1}}}%

\newcommand{\drawleftbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\left\{ \rule[0mm]{0mm}{#3mm} \right.$}}%

\newcommand{\drawrightbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\left\} \rule[0mm]{0mm}{#3mm} \right.$}}%

\newcommand{\drawoverbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\overbrace{\rule[0mm]{#3mm}{0mm}}$}}%

\newcommand{\drawunderbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\underbrace{\rule[0mm]{#3mm}{0mm}}$}}%

\newcommand{\drawarc}[5]%
{\put(#1,#2){\arc{#3}{#4}{#5}}}%

\newcommand{\drawshadebox}[8]%
{%
    % modified 17/7/96 - comment at end of lines
    \makebox(0,0)[cc]{\special{sh #8}\path(#1,#4)(#3,#4)(#3,#6)(#1,#6)(#1,#4)}%
    \put(#2,#5){\makebox(0,0){\makebox(0,0)[cc]{#7}}}%
}

\newcommand{\drawpostscript}[5]%
{%
    \put(#1,#2){\makebox(0,0)[cc]{\epsfxsize=#3mm\epsfysize=#4mm \epsffile{#5}}}%
}%


% \drawshadowframebox{x}{y}{w}{h}{text}
% example:
% \drawshadowframebox{80}{40}{100}{40}{this is a shadowframebox}
%
\newcommand{\drawshadowframebox}[5]%
{%                                        
    \put(#1,#2){\makebox(0,0){\shadowbox{\rule{0mm}{#4mm}\rule{#3mm}{0mm}}}}%
    \put(#1,#2){\makebox(0,0){#5}}%
}%

%
% End of LaTeX-CAD macros
%================================================================


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% picture macros from various sources
% for some reason, the order of these \input's is
% crucial (generates missing \begin{document} errors)
%\input rotate.sty
%\input fancybox.sty
%\input epic.sty
%\input eepic.sty
%\input epsf.sty
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

